﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#if 0
class Stack
{
public:
	Stack(int capaccity = 4)
	{
		if (capaccity == 0)
		{
			//默认先开4个空间
			int* tmp = (int*)malloc(sizeof(int) * 4);
			if (nullptr == tmp)
			{
				perror("Stack(int capaccity = 4) malloc");
				return;
			}
			_a = tmp;
			_capacity = 4;
			_top = 0;//默认指向栈顶元素的下一个位置
		}
		else
		{
			int* tmp = (int*)malloc(sizeof(int) * capaccity);
			if (nullptr == tmp)
			{
				perror("Stack(int capaccity = 4) malloc");
				return;
			}
			_a = tmp;
			_capacity = capaccity;
			_top = 0;
		}
	}
	~Stack()
	{
		free(_a);
		_a = nullptr;
		_top = _capacity = 0;
	}
	void Push_back(int x)
	{
		//……
	}

	Stack(const Stack& st)
	{
		//开空间
		//数据拷贝
		//空间释放
		//……
	}

	void operator=(const Stack& st)
	{
		cout << "operator=(const Stack& st)" << endl;//对于自定义类型成员，方便查看是否调用
	}
private:
	int* _a;
	int _top;
	int _capacity;
};
class MyQueue
{
private:
	Stack Popst;
	Stack Pushst;
};
int main()
{
	//Stack* st1 = new Stack;//不需要进行类型强转和返回值检查；并且自动调用构造函数进行初始化
	//Stack* st2 = (Stack*)malloc(sizeof(Stack));
	//if (st2 == nullptr)
	//{
	//	perror("malloc()");
	//	return 0;
	//}
	//st2->Push_back(1);
	Stack* st1 = new Stack;
	//st1->Stack();//不支持显示调用构造函数

	new(st1)Stack();//使用定位new ，支持显示调用构造函数

	st1->~Stack();//支持显示调用析构函数
	return 0;
}

int main(int argc, char* argv[])

{

	string a = "hello world";

	string b = a;

	if (a.c_str() == b.c_str())

	{

		cout << "true" << endl;

	}

	else cout << "false" << endl;

	string c = b;

	c = "";

	if (a.c_str() == b.c_str())

	{

		cout << "true" << endl;

	}

	else cout << "false" << endl;

	a = "";

	if (a.c_str() == b.c_str())

	{

		cout << "true" << endl;

	}

	else cout << "false" << endl;

	return 0;

}


//int main()
//{
//  // 找只出现一次的字符
//	int tmp[26] = { 0 };
//	string str;
//	cin >> str;
//	auto it = str.begin();
//	while (it != str.end())
//	{
//		tmp[*it - 'a']++;
//		++it;
//	}
//	it = str.begin();
//	while (it != str.end())
//	{
//		if (tmp[*it - 'a'] == 1)
//		{
//			cout << (*it);
//			return 0;
//		}
////		++it;
////	}
////
////	return -1;
////}
//#include<string>
//int main()
//{
// 统计最后一个单词长度
//	string str;
//	getline(std::cin, str);//解决：cin输入的数据，默认以空格或者是换行结束读取
//	size_t pos = str.rfind(' ');
//	if (pos != std::string::npos)
//	{
//		cout << str.size() - (pos + 1);//左闭右开区间
//	}
//	else
//	{
//		cout << str.size();//输入的就是只有一个单词
//	}
//	return 0;
//}
int main()
{
	int x = 12;
	char ch = 'a';
	printf("%x,%o\n", ch, ch, x);//分别以16进制，8进制形式输出
	printf("%x = %%d\n", x);
	//之所以不是%12
	//在于调用printf()这个函数的时候你的实参个数与参数不匹配：实参1个，按着你的理解形参就是2个
	//正确结果：%d
	//原因：发生了字符的转义
	//首先第一个% 表示对后面的内容进行转义
	//所以输出%d

	//当你按着下面这样写就是正确的
	printf("%x = %d\n", x, x);//结果 c = 12



	//当你按着下面的写，结果是不会输出 %d
	//因为此时形参个数：2个，%d：表示以10进制有符号的形式打印整数，又因为你没有传实参，所以打印的是随机值
	printf("%x = %d", x);//
	return 0;
}
int GetMonthDay(int _year, int _month)
{
	int Days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	if (_month == 2 && ((_year % 4 == 0 && _year % 100 != 0) || (_year % 400 == 0)))
		return 29;
	return Days[_month];
}
class Date
{
	friend ostream& operator<<(ostream& out, const Date& d);

public:
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	Date& operator=(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
		return *this;
	}
	bool operator>(Date& d)
	{
		if (_year < d._year)
			return false;
		else if (_year > d._year)
			return true;
		else if (_year == d._year && _month > d._month)
			return true;
		else if (_year == d._year && _month == d._month && _day > d._day)
			return true;
	}
	Date operator+(int num)
	{
		Date tmp(*this);//不能更改当前参考对象
		tmp._day += num;
		while (tmp._day > GetMonthDay(tmp._year,tmp._month))
		{
			tmp._day -= GetMonthDay(tmp._year, tmp._month);
			++tmp._month;
			if (tmp._month == 13)
			{
				tmp._month = 1;
				tmp._year++;
			}
		}
		return tmp;
	}
private:
	int _year;
	int _month;
	int _day;
};
ostream& operator<<(ostream& out, const Date& d)
{
	if (d._month < 10 && d._day < 10)
		out << d._year << '-' << 0 << d._month << '-' << 0 << d._day;
	else if(d._month<10)
		out << d._year << '-' << 0 << d._month << '-' << d._day;
	else if (d._day < 10)
		out << d._year << '-' << d._month << '-' << 0 << d._day;
	else 
		out << d._year << '-'<< d._month << '-'<< d._day;

	return out;
}
int main()
{
	//已知2个日期之间的天数，倒推具体日期
	//在已知日期基础上+ 天数-1 = 日期
	int Year, n;
	while (cin>>Year>>n)
	{
		Date d1(Year, 1, 1);
		Date d2 = d1 + (n - 1);
		cout << d2 << endl;
	}
}
#endif
int arrDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int GetMonthDay(int _year, int _month)
{
	
	if (_month == 2 && ((_year % 4 == 0 && _year % 100 != 0) || (_year % 400 == 0)))
		return 29;
	else
		return arrDay[_month];
}
class Date
{
public:
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	
private:
	int _year;
	int _month;
	int _day;
};


int main()
{
	//计算某天是一年的第几天
	int year, month, day;
	cin >> year >> month >> day;
	Date d1(year, month, day);
	Date d2(year, month, 1);
	int sum = 0;
	for (int i = 1; i < month;++i)
	{
		sum += GetMonthDay(year, i);
	}
	cout << sum+day << endl;
	return 0;
}